home *** CD-ROM | disk | FTP | other *** search
- /* sort3.c: Sort structures */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #define NELEMS 4
-
- struct person
- {
- char last[16];
- char first[11];
- char phone[13];
- int age;
- };
-
- static int name_comp(const void *, const void *);
- static int age_comp(const void *, const void *);
-
- main()
- {
- size_t i;
- static struct person some_people[NELEMS] =
- {{"Lincoln","Abraham","555-1865",161},
- {"Ford","Henry","555-1903",98},
- {"Ford","Edsel","555-1965",53},
- {"Trump","Donald","555-1988",49}};
-
- qsort(some_people, NELEMS, sizeof some_people[0], name_comp);
-
- puts("By name:");
- for (i = 0; i < NELEMS; ++i)
- printf("%s, %s, %s %d\n",
- some_people[i].last,
- some_people[i].first,
- some_people[i].phone,
- some_people[i].age);
-
- qsort(some_people, NELEMS, sizeof some_people[0], age_comp);
-
- puts("\nBy age:");
- for (i = 0; i < NELEMS; ++i)
- printf("%s, %s, %s %d\n",
- some_people[i].last,
- some_people[i].first,
- some_people[i].phone,
- some_people[i].age);
- return 0;
- }
-
- static int name_comp(const void *p1, const void *p2)
- {
- struct person *sp1 = (struct person *) p1;
- struct person *sp2 = (struct person *) p2;
- int order = strcmp(sp1->last,sp2->last);
-
- if (order == 0)
- order = strcmp(sp1->first,sp2->first);
- return order;
- }
-
- static int age_comp(const void *p1, const void *p2)
- {
- struct person *sp1 = (struct person *) p1;
- struct person *sp2 = (struct person *) p2;
-
- return sp1->age - sp2->age;
- }
-
- /* Output:
- By name:
- Ford, Edsel, 555-1965 53
- Ford, Henry, 555-1903 98
- Lincoln, Abraham, 555-1865 161
- Trump, Donald, 555-1988 49
-
- By age:
- Trump, Donald, 555-1988 49
- Ford, Edsel, 555-1965 53
- Ford, Henry, 555-1903 98
- Lincoln, Abraham, 555-1865 161
- */
-